/*
 *英才汇硕信息科技有限公司 拥有本软件版权 并保留所有权利。
 *Copyright ,YCHS Information&Science Technology Co.,Ltd,
 *All rights reserved.
 */
package com.tyust.dao;


import com.tyust.domain.User;
import com.tyust.util.DbUtilHikari;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

import cn.hutool.crypto.SecureUtil;
/**
 * 对用户表的操作（增删改查）
 * @author 舒傲寒
 * @version 1.0
 * @date 2023/1/7
 */
public class UserDao {
    /**
     * 查询所有用户
     * @return 包含所有用户对象的集合
     */
    public List<User> selectAllUser(){
        //创建空集合，存放用户对象
        List<User> userList = new ArrayList<User>();
        Connection conn = null;
        PreparedStatement pstmt = null;
        //rs代表结果集，在数据库中查询到的结果放于rs内
        ResultSet rs = null;

        //获得数据库连接
        conn = DbUtilHikari.getConnection();
        String sql = "SELECT userid,username,userpsw FROM users";
        try {
            pstmt = conn.prepareStatement(sql);
            rs = pstmt.executeQuery();
            //将rs中的数据转移到userList中,rs.next()循环读取数据
            while (rs.next()){
                User user = new User();
                user.setUserid(rs.getInt("userid"));
                user.setUsername(rs.getString("username"));
                user.setUserpsw(rs.getString("userpsw"));
                userList.add(user);
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            DbUtilHikari.close(rs,pstmt,conn);
        }

        return userList;
    }
    /**
     * 用户登录
     * @param uname 登录用户名
     * @param upsw 登录密码
     * @return true-登录成功；false-失败
     */
    public boolean login(String uname,String upsw){
        //flag表示登录成功与否的标志
        boolean flag = false;
        Connection conn = null;
        PreparedStatement pstmt = null;
        //rs代表结果集，在数据库中查询到的结果放于rs内
        ResultSet rs = null;

        //获得数据库连接
        conn = DbUtilHikari.getConnection();
        //定义准备SQL语句，登录是查询语句select
        String sql = "SELECT * FROM users WHERE username=? AND userpsw=?";
        try {
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1,uname);
            pstmt.setString(2,SecureUtil.md5(upsw));
            //下达执行指令,SQL语句
            rs = pstmt.executeQuery();
            //next()判断rs结果集里面是否有数据,查到数据-返回true
            if(rs.next()){
                flag = true;
            }else{
                flag = false;
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            DbUtilHikari.close(rs,pstmt,conn);
        }
        return flag;
    }



    /**
     * 用户注册
     * @param uname 用户名
     * @param upsw 密码
     * @return 1：成功；0：失败
     */
    public  int insertUser(String uname,String upsw){
        //声明变量,conn代表数据库连接
        Connection conn = null;
        //预编译对象，用pstmt执行SQL语句
        PreparedStatement pstmt = null;
        //注册成功与否
        int flag = 0;

        //获取数据库连接
        conn = DbUtilHikari.getConnection();
        //定义并准备SQL语句
        String sql = "INSERT INTO users(username,userpsw) VALUES(?,?)";
        //可自动捕获异常
        try {
            pstmt = conn.prepareStatement(sql);
            //给占位符赋值
            pstmt.setString(1,uname);
            pstmt.setString(2,SecureUtil.md5(upsw));
            //下达SQL语句的执行指令
            flag = pstmt.executeUpdate();

        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            //关闭数据库资源
            DbUtilHikari.close(pstmt,conn);
        }
        return flag;
    }

    /**
     * 删除用户功能
     * @param userid 用户编码
     * @return 删除成功返回1，否则返回0
     */
    public int deleteUser(int userid){
        //1：删除成功；0：删除失败
        int flag =0;

        Connection conn = null;
        PreparedStatement pstmt = null;
        conn = DbUtilHikari.getConnection();
        String sql = "DELETE FROM users WHERE userid=?";
        try {
            pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1,userid);

            flag = pstmt.executeUpdate();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            DbUtilHikari.close(pstmt,conn);
        }
        return flag;
    }

    /**
     * 修改用户信息
     * @param userid 用户编号
     * @param uname 用户名
     * @param upsw 密码
     * @return 1：修改成功；0：失败
     */
    public int updateUser(int userid,String uname,String upsw){
        int flag =0;

        Connection conn = null;
        PreparedStatement pstmt = null;
        conn = DbUtilHikari.getConnection();
        String sql = "UPDATE users SET username=?,userpsw=? WHERE userid=?";
        try {
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1,uname);
            pstmt.setString(2,SecureUtil.md5(upsw));
            pstmt.setInt(3,userid);

            flag = pstmt.executeUpdate();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            DbUtilHikari.close(pstmt,conn);
        }
        return flag;
    }
}